雑に読む Google SWE対策
まとめた結果、雑に学ぶコンピュータサイエンスになってしまった基素.icon
「高校化学」より範囲広いと思うんだけどなぁ
それらのうち、特に現代の大規模 web 開発につながる分野について学ぶには、以下のブログエントリで紹介されている本を、一通り読みましょう。
上記を一通り読むことで、大学の情報系の学部の授業のある程度の範囲をカバーできると思います。
ここで紹介されている本のリスト
面接官役3人で協議した結果、できるだけ量を減らして6冊が選ばれました。オペレーティングシステムの本は、どうするのがいいのか少し自信が持てませんでした。3人とも似たような本を読んでいたのがなかなか面白いです。
「作ってみた」系の本として、CPU やメモリーの構造が分かりますので、このレイヤーを俯瞰するのによいでしょう。
3ウェイハンドシェイクと輻輳制御が書かれているとなると、ほとんど選択肢がありませんでした。逆に、Tier 1 network とかは知らなくていいんじゃないでしょうか。
オペレーティングシステムについての本はこれでよかったかはまだ迷いがあります。
REST にこだわりが強い本ですが、そこは軽く流すようにと伝えました。
コンパイラの大まかな原理は聞かれることがあるかと思います。言語に特有のことは出てこないので、そこは別で補ってください。
筆者の目論見が成功していれば、この本を読むことで、読者はコンパイラ作成のテクニックやCPU命令セットの知識だけではなく、大きなプログラムを小さなステップにわけて少しづつ作っていく方法や、ソフトウェアテストの手法、バージョン管理の手法、そしてコンパイラ作成のような野心的なプロジェクトに取り組むときの心構えすら学ぶことができるはずです。
他に紹介されていた本の本
せっかくなので、本を紹介したときに何を話したかと、もう少し時間があったら紹介していたであろう本を追加しておきます。
どの分野であれ、ここからここまでは常識という範囲があり、特にある程度体系化された学問はそれがはっきりしています。たとえば、ACM と IEEE-CS は Computing Curricula を出しているので、それを参考にするのでもいいですし、関係する学科のカリキュラムを参考にして、その授業でどのような書籍が参考に挙げられているかを見るのもいいでしょう。
情報科学は、「作ってみた」「現実はこう」「理論的制限」の本を読むとよいと思います。
オペレーティングシステム―設計と理論およびMINIXによる実装
一緒にタネンバウムも紹介していました。
Modern Compiler Implementation in ML
高速化の技法の部分は過剰かもしれません。
30日でできる! OS自作入門
この本はたしか本屋では名前が挙がっていました。OS を作ってみようという本なのですが、周辺の技術、たとえば、ハードディスクのフォーマットである FAT16 の仕様が載っているのがいいですね。
アルゴリズムが苦手だったら入れていたでしょう。最近の模擬面接ではコードがおぼつかない感じだと思うと、なんでもいいんですが、AtCoder の ABC 4問時代の C 問題くらいを埋めることをおすすめしています。あと、コードは書けたら終わりではなくて、どの行をどう変えたらどうなるのか、どういう場合に動かなくなるのか、どう書いたらより洗練されるのか、を考えるといいと思います。
ただし追記がある
ただし、 nuc さんらによると、プログラミングコンテストチャレンジブックはチョイスが悪かったそうです。代わりに以下の本をお勧めするとのことです。
2004年の本の復刊
まえがきでAppleに注文つけるの面白いなw基素.icon
2009年
Introduction To Functional Programming
C++ Templates: The Complete Guide
Purely Functional Data Structures
この辺は私の趣味ですが、関数型言語はなにか触っておいたほうがいいと思いますし、C++ テンプレートはやらかしでチューリング完全なので一回目を合わせておくべきですし、純粋関数型データ構造は見ておいて、いいんじゃないでしょうか。
エキスパートCプログラミング―知られざるCの深層
Modern C++ Design
Effective C++
Exceptional C++
競技プログラミングの始祖のあたりの人たちは、C++ 使うならばこのあたり読んでいた気がします。最近の C++ はちょっと違うものですが、大切なのは、見慣れていて使役しているものが本性はおぞましいという感覚じゃないでしょうか。
言語は何でもいいと思うのです。たとえば、従妹にはじめてプログラミングを教えたときは C++ でしたが、妹には Perl + SQLite という構成で教えました。Perl は、たとえばレキシカルスコープとダイナミックスコープが両方あるなど、とても教育的にいい言語です。ただ、とにかく表層的にしか理解していない人や本であふれていて、社会的なノイズのせいできちんと理解するのが大変です。私は、大学の同期を問い詰めるまで、振る舞いが分かりませんでした。なお、その人も合宿のメンバーで Google の同僚になりました。
入門 コンピュータ科学 ITを支える技術と理論の基礎知識
これは、最近見つけたんですが、広く書かれていて、とりあえず、これもいいんじゃないでしょうか。
貼られた意図がわからなかった基素.icon
所属を参照。中の人から割とネガティブに捉えられてる記事だよという話nishio.icon
なるほど基素.icon
どのあたりがどうなってこういう感想になったんだろう基素.icon
個人的な記事の感想はこんな感じ基素.icon
試験はこんな感じなのか〜
対策自体が正攻法っぽいのでそれ自体が楽しそう
コンピュータサイエンスは全然知らないので面白いかも
参考書が書いてあって便利
Lillianさんは外れ値だから同じことはできない
高校化学より範囲は数倍広いように見える
高校化学の参考書って有機無機含めて5冊も読んだら試験対策には十分じゃないかな?
ex-Googleのネガティブ反応
記事を書いている人はex-Google